package com.millstein.tsinglog.service;

import com.millstein.tsinglog.model.dto.user.ChangePasswordDTO;
import com.millstein.tsinglog.model.dto.user.UserAssignRoleDTO;
import com.millstein.tsinglog.model.dto.user.UserLoginDTO;
import com.millstein.tsinglog.model.dto.user.UserSaveDTO;
import com.millstein.tsinglog.model.pojo.User;
import com.millstein.tsinglog.model.vo.result.PageResult;

import java.util.List;

public interface UserService {
    /**
     * 用户登录的方法
     * @param userLoginDTO 登录时用户的信息
     * @return
     */
//    Map<String, Object> login(UserLoginDTO userLoginDTO);

    /**
     * 条件及分页查询用户信息
     * @param currentPage 当前页
     * @param pageSize 一页包含的数据
     * @param keyword 关键字
     * @return
     */
    PageResult getUserByPage(Integer currentPage, Integer pageSize, String keyword);

    /**
     * 重置密码
     * @param userLoginDTO 用户信息
     * @return
     */
    void resetPassword(UserLoginDTO userLoginDTO);

    /**
     * 分配权限
     * @param userAssignRoleDTO
     */
    void assignRole(UserAssignRoleDTO userAssignRoleDTO);

    /**
     * 新增用户
     * @param userSaveDTO
     */
    void insertUser(UserSaveDTO userSaveDTO);

    /**
     * 更新用户
     * @param userSaveDTO
     */
    void updateUser(UserSaveDTO userSaveDTO);

    /**
     * 修改用户的可用状态
     * @param id 用户id
     * @param usable 1启用，0禁用
     */
    void changeUsable(Long id, Short usable);

    /**
     * 根据ids批量删除用户信息
     * @param ids
     * @return
     */
    void deleteByIds(List<Long> ids);

    /**
     * 根据角色id查询其对应的用户数量
     * @param roleId 角色id
     * @return
     */
    Integer getUserCountByRole(Long roleId);

    /**
     * 根据用户名查询用户信息
     * @param username 用户名
     * @return
     */
    User getUserByUsername(String username);

    /**
     * 修改密码
     * @param changePasswordDTO 密码信息
     */
    void changePassword(ChangePasswordDTO changePasswordDTO);

    /**
     * 根据权限名称查询所有拥有此权限的用户
     * @param code
     * @return
     */
    List<String> getUserByCode(String code);
}
